#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H

#include <pthread.h>

//小/子缓冲区
typedef struct {
    //作为缓存区的数据指针使用，一直指向起点，通过ptr+n来对准位置
    unsigned char *ptr; // 数据指针（unsigned就范围更大，防止127以上放不下）
    int total_size; // 空间大小
    int len; // 数据长度
}SubBuffer;

//大缓冲区
typedef struct {
    SubBuffer *sub_buffers[2]; // 读和写缓冲区的数组(俩小缓冲区)
    int read_index; // 读缓冲区索引
    int write_index; // 写缓冲区索引
    pthread_mutex_t read_lock; // 读锁
    pthread_mutex_t write_lock; // 写锁
}Buffer;

//初始化一个缓冲区
//参数：子缓冲区大小 返回值：缓冲区指针
Buffer * app_buffer_init(int total_size);

//释放缓冲区
//参数：缓冲区指针
void app_buffer_free(Buffer *buffer);

//向缓冲区写入数据
//参数：缓冲区指针 数据指针 数据长度 返回值：成功与否（0/-1）
int app_buffer_write(Buffer *buffer, unsigned char *data, int data_len);

//从缓冲区读取数据
//参数：缓冲区指针 数据指针 容器大小 返回值：数据长度
int app_buffer_read(Buffer *buffer, unsigned char *data, int data_buf_len);

#endif // __APP_BUFFER_H
